package xfuzzy.alg_genetico.indeterminado.codification;

public class Comparador {
	
	/**
	 * Compara dos codificaciones y devuelve un valor segun su similitud
	 * @param codificacion1 Codificacion a comparar
	 * @param codificacion2 Codificacion a comparar
	 * @return int Devuelve cero si ambas codificaciones son iguales en estructura y orden de variables; 1 si son 
	 * distintas en estructura; 2 si son iguales en estructura y distintas en orden de variables.
	 * */

	public static int comparar(String codificacion1, String codificacion2)  {
		
		char [] char_cod1 = codificacion1.toCharArray();
		char [] char_cod2 = codificacion2.toCharArray();
		for (int index = 0; index < char_cod1.length; index++)  {
			 if ((char_cod1[index] == '-') && (char_cod2[index] != '-'))
				 return 1;

			 if ((char_cod2[index] == '-') && (char_cod1[index] != '-'))
				 return 1;
		}
		
		String [] token_cod1 = codificacion1.split("-");
		String [] token_cod2 = codificacion2.split("-");
		String auxiliar = "";
		
		// Se comparan todos los trozos de la codificacion. Si no son iguales, se mira si tiene una distancia de 2, porque
		// podria ser (21) igual a (12), con lo que se intercambian las posiciones de una de las cadenas y se vuelve
		// a comparar.
		for (int index = 0; index < token_cod1.length; index++)  {
			 if (token_cod1[index].compareTo(token_cod2[index]) != 0)  {
				 if (token_cod1[index].length() == 1)
					 return 2;
				 else  {
					 auxiliar = String.valueOf(token_cod1[index].charAt(1)) + String.valueOf(token_cod1[index].charAt(0));
					 if (auxiliar.compareTo(token_cod2[index]) != 0)
						 return 2;
				 }
			 }
		}
		
		return 0;
	}
}
